package br.com.hmm.mb;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIData;
import javax.faces.model.SelectItem;

import br.com.hmm.businesslogic.CategoriaService;
import br.com.hmm.businesslogic.ContaService;
import br.com.hmm.businesslogic.ItensCategoriaService;
import br.com.hmm.businesslogic.TransacoesService;
import br.com.hmm.entidade.Categoria;
import br.com.hmm.entidade.Conta;
import br.com.hmm.entidade.ItensCategoria;
import br.com.hmm.entidade.Transacoes;

public class ManterTransacoesBean extends GenericoBean {
	
	private Transacoes transacoes;
	
	private Transacoes transacaoSelecionada;
	
	private List<SelectItem> listaCategorias = new ArrayList<SelectItem>();
	
	private List<SelectItem> listaItensCategoria = new ArrayList<SelectItem>();
	
	private Conta conta;
	
	private UIData tblTransacoes;
	
	private UIData tblConsultaTransacoes;
	
	private String tipo;
	
	
	
	
	
	public ManterTransacoesBean(){
		transacoes = new Transacoes();
		conta = new Conta();
		
	}


	public Transacoes getTransacoes() {
		return transacoes;
	}


	public void setTransacoes(Transacoes transacoes) {
		this.transacoes = transacoes;
	}
	
	public List<SelectItem> getListaCategorias() {
		return listaCategorias;
	}

	public void setListaCategorias() {
		try{
			if(!listaCategorias.isEmpty()){
				listaCategorias.clear();			
			}
			List<Categoria> lc = new ArrayList<Categoria>();
			lc = CategoriaService.list();
			if(!lc.isEmpty()){
				for(Categoria c : lc){
					listaCategorias.add(new SelectItem(c.getId(),c.getNome()));
				}
			}
		}catch(Exception e){
			adicionarMensagemErro("Erro ao tentar listar categorias." + e.getLocalizedMessage());
		}
	}
	
	
	public List<SelectItem> getListaItensCategoria() {
		return listaItensCategoria;
	}


	public void setListaItensCategoria() {
		try{
			if(!listaItensCategoria.isEmpty()){
				listaItensCategoria.clear();
			}
			List<ItensCategoria> li = new ArrayList<ItensCategoria>();
			if(getTransacaoSelecionada() != null){
				li = ItensCategoriaService.listByCategoria(transacaoSelecionada.getItemCategoria().getCategoria().getId());
			}else{
				li = ItensCategoriaService.listByCategoria(transacoes.getItemCategoria().getCategoria().getId());
			}
			
			if(!li.isEmpty()){
				for(ItensCategoria i : li){
					listaItensCategoria.add(new SelectItem(i.getId(),i.getNome()));
				}
			}
		}catch (Exception e) {
			adicionarMensagemErro(e.getMessage());
			
		}
	}
	
	


	public Conta getConta() {
		return conta;
	}


	public void setConta(Conta conta) {
		this.conta = conta;
	}


	public Transacoes getTransacaoSelecionada() {
		return transacaoSelecionada;
	}


	public void setTransacaoSelecionada(Transacoes transacaoSelecionada) {
		this.transacaoSelecionada = transacaoSelecionada;
	}


	public UIData getTblTransacoes() {
		return tblTransacoes;
	}


	public void setTblTransacoes(UIData tblTransacoes) {
		this.tblTransacoes = tblTransacoes;
	}


	public UIData getTblConsultaTransacoes() {
		return tblConsultaTransacoes;
	}


	public void setTblConsultaTransacoes(UIData tblConsultaTransacoes) {
		this.tblConsultaTransacoes = tblConsultaTransacoes;
	}


	public String getTipo() {
		return tipo;
	}


	public void setTipo(String tipo) {
		this.tipo = tipo;
	}


	public String novaTransacao(){
		transacoes = new Transacoes();
		setListaCategorias();
		listaItensCategoria.clear();
		return "goTransacoes";
	}
	
	
	
	public String gravar(){
		try{
			this.transacoes.setConta(this.conta);
			if(TransacoesService.inserir(transacoes) == true){
				ManterContaBean mBean = (ManterContaBean) getBean("contaBean");
				mBean.getContaSelecionada().setListaTransacoes(TransacoesService.getTransacoesByConta(mBean.getContaSelecionada()));
				mBean.setDadosConta(ContaService.getSaldo(mBean.getContaSelecionada().getId()))  ;
				mBean.getContaSelecionada().setSaldo(mBean.getDadosConta());
				try{
					mBean.setPagamentosFazer(TransacoesService.getPagamentosFazer(mBean.getContaSelecionada().getId()));
				}catch(NullPointerException exp){
					
				}
				try{
					mBean.setLancamentosFuturos(TransacoesService.getLancamentosFuturos(mBean.getContaSelecionada().getId()));
				}catch(NullPointerException exp){
					
				}
				mBean.getTabConta().setSelectedTab("tab2");
				adicionarMensagem("Transação adicionada com sucesso.");
				
			}
		}catch (Exception e) {
			adicionarMensagemErro("Erro ao tentar incluir transação. " + e.getMessage());
		}
		
		return novaTransacao();
	}
	
	
	public String edicaoTransacao(){
		try{
			transacaoSelecionada = (Transacoes) tblTransacoes.getRowData();
			setListaCategorias();
			setListaItensCategoria();
			return "goEdicaoTransacao";
		}catch(Exception e){
			adicionarMensagemErro( e.getMessage());
		}
		
			return "";
		
	}
	
	public String atualizar(){
		try{
			if(TransacoesService.update(transacaoSelecionada) == true){
				ManterContaBean mBean = (ManterContaBean) getBean("contaBean");
				try{
					if(!mBean.getPagamentosFazer().isEmpty()){
						mBean.getPagamentosFazer().clear();
					}
					mBean.setPagamentosFazer(TransacoesService.getPagamentosFazer(mBean.getContaSelecionada().getId()));
				}catch(NullPointerException exp){
					
				}
				try{
					if(!mBean.getLancamentosFuturos().isEmpty()){
						mBean.getLancamentosFuturos().clear();
					}
					mBean.setLancamentosFuturos(TransacoesService.getLancamentosFuturos(mBean.getContaSelecionada().getId()));
				}catch(NullPointerException exp){
					
				}
				mBean.getContaSelecionada().setSaldo(ContaService.getSaldo(mBean.getContaSelecionada().getId()));
				adicionarMensagem("Transação atualizada com sucesso.");				
				return "goDetalhesConta";
			}
		}catch (Exception e) {
			adicionarMensagemErro("Erro ao tentar atualizar a transação." + e.getLocalizedMessage());
		}
		return "";
	}
	
	
	public String delete(){
		try{
			transacaoSelecionada = (Transacoes) tblTransacoes.getRowData();
			if(TransacoesService.delete(transacaoSelecionada) ==  true){
				ManterContaBean mBean = (ManterContaBean) getBean("contaBean");
				mBean.getContaSelecionada().getListaTransacoes().remove(tblTransacoes.getRowIndex());
				mBean.getContaSelecionada().setSaldo(ContaService.getSaldo(mBean.getContaSelecionada().getId()));
				try{
					if(!mBean.getPagamentosFazer().isEmpty()){
						mBean.getPagamentosFazer().clear();
					}
					mBean.setPagamentosFazer(TransacoesService.getPagamentosFazer(mBean.getContaSelecionada().getId()));
				}catch(NullPointerException exp){
					
				}
				try{
					if(!mBean.getLancamentosFuturos().isEmpty()){
						mBean.getLancamentosFuturos().clear();
					}
					mBean.setLancamentosFuturos(TransacoesService.getLancamentosFuturos(mBean.getContaSelecionada().getId()));
				}catch(NullPointerException exp){
					
				}
				adicionarMensagem("Transação removida com sucesso.");
				return "goDetalhesConta";
			}
		}catch(Exception e){
			adicionarMensagemErro("Não foi possível remover a transação." + e.getLocalizedMessage());
		}
		
		return "";
	}
	
	public String voltar(){
		/*ManterContaBean mBean = null;
		try{
			mBean = (ManterContaBean) getBean("contaBean");
			mBean.getContaSelecionada().setListaTransacoes(TransacoesService.getTransacoesByConta(mBean.getContaSelecionada()));
			mBean.setDadosConta( ContaService.getSaldo(mBean.getContaSelecionada().getId()));
			mBean.getContaSelecionada().setSaldo(mBean.getDadosConta());		
			mBean.listarSociosConta();
		}catch (Exception e) {
			adicionarMensagemErro("Não foi possível retornar a página anterior. " +e.getLocalizedMessage() );
		}*/
		return "goDetalhesConta";
	}

}
